// Fill out your copyright notice in the Description page of Project Settings.

//notificatino:  (for managers)

// Each Manager provide a branch of API for call

// Console is the only one window that use for test all those APIs imp by Managers

// Interpreter is used for Console and some dynamic event manager

// All the manager must be the actor and be drag into the scence 

// Global config save some data that used for all objects, it`s also a single class obj and abstract

//notice that the abstract is the obj that never exist in the scence


// Game Manager is used for manager the whole game and the big action etc. Save Load ReStart Begin etc.
// Game Manager also used as a bridge for communication
// Game Manager provide message handle and some debug


#pragma once
#include "GlobalConfig.h"
#include "GlobalData.h"
#include "ResourceManager.h"
#include "CGameManager.generated.h"

UCLASS()
class ISALONG2_API ACGameManager : public AActor
{
	GENERATED_BODY()

public:	
	// Sets default values for this actor's properties
	ACGameManager();

	// Called when the game starts or when spawned
	virtual void BeginPlay() override;
	
	// Called every frame
	virtual void Tick( float DeltaSeconds ) override;

private:

	void InitConsole();
public:

	void WriteLine(char* str);

	void WriteLine(int data);

	void WriteLine(void* ptr);

	void WriteLine(float data);

	void WriteScreen(int id,int data);

	void WriteScreen(int id, FString data);

	void WriteScreen(int id, FVector data);

	void WriteScreen(int id, FVector2D data);
	
	void CloseConsole();

public:
	//self pointer
	static ACGameManager* _gameManager;
	
};
